package com.zhangj.queue.array;

/**
 * @ClassName ArrayQueue
 * @Description
 * @Author zhangjie
 * @Date 2022/1/13 9:37
 * @Version 1.0
 */

public class ArrayQueue {

    //这里为了方便我们固定长度为3,且为一个数字数组
    private int[] queue = new int[3];
    //指向队列第一个元素的前一个元素
    private int front = -1;
    //指向队列最后一个元素
    private int rear = -1;
    //表示队列的最大容量
    private int maxSize = 3;


    //判断是否为空的方法,我们维护数据是取出还是查看就通过rear与front是否加1
    public boolean isEmpty() {
        return rear == front;
    }

    //判断是否满了
    public boolean isFull(){
        return rear-front >= maxSize;
    }

    //添加方法,这里本来要判断是否初始化了-->通过maxSize
    public void add(int num) {
       if(this.isFull()){
           System.out.println("队列已满");
           return;
       }

       queue[++rear] = num;
    }

    //查看固定元素方法,判空就省略了
    public int seeOne(int index){
        if (index>=maxSize) {
            System.out.println("输入的下标不合法");
            //这里应该抛一个异常,但是现在我们就返回-66
            return -66;
        }

        return queue[index];
    }

    //取一个元素方法,这里并不提供取出固定下标的方法,这可以从尾部取,依旧不做判空
    public int getElement(){
        return queue[++front];
    }

    //查看所有的方法,这里就做打印处理了
    public void getAll(){
        for (int i : queue) {
            System.out.println("queue = " + i);
        }
    }
}
